home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d18
/
vis082s.arc
/
VGA256.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-04-17
|
3KB
|
116 lines
{-------------------------------------------------------------------}
{ A simple program to illustrate how to plot pixels and draw lines }
{ in the 320x200 256 color mode available on the VGA and MCGA cards }
{ }
{ Last update: 5/24/88 by John Sieraski 76117,2022 }
{-------------------------------------------------------------------}
{$R-,S-}
uses
Crt, Dos;
procedure PutPixel(X, Y : word; Color : byte);
{ Plot a pixel at (X, Y) in Color }
begin
Mem[$A000:Y*320+X] := Color;
end;
procedure Switch(var First, Second : integer);
{ Exchange the values of First and second }
var
Temp : integer;
begin
Temp := First;
First := Second;
Second := Temp;
end; { Switch }
procedure Line(X1, Y1, X2, Y2, Color : integer);
{ Uses Bressenham's algorithm for drawing a line }
var
LgDelta, ShDelta, LgStep, ShStep, Cycle, PointAddr : integer;
begin
LgDelta := X2 - X1;
ShDelta := Y2 - Y1;
if LgDelta < 0 then
begin
LgDelta := -LgDelta;
LgStep := -1;
end
else
LgStep := 1;
if ShDelta < 0 then
begin
ShDelta := -ShDelta;
ShStep := -1;
end
else
ShStep := 1;
if LgDelta > ShDelta then
begin
Cycle := LgDelta shr 1; { LgDelta / 2 }
while X1 <> X2 do
begin
Mem[$A000:Y1*320+X1] := Color; { PutPixel(X1, Y1, Color); }
Inc(X1, LgStep);
Inc(Cycle, ShDelta);
if Cycle > LgDelta then
begin
Inc(Y1, ShStep);
Dec(Cycle, LgDelta);
end;
end;
end
else
begin
Cycle := ShDelta shr 1; { ShDelta / 2 }
Switch(LgDelta, ShDelta);
Switch(LgStep, ShStep);
while Y1 <> Y2 do
begin
Mem[$A000:Y1*320+X1] := Color; { PutPixel(X1, Y1, Color); }
Inc(Y1, LgStep);
Inc(Cycle, ShDelta);
if Cycle > LgDelta then
begin
Inc(X1, ShStep);
Dec(Cycle, LgDelta);
end;
end;
end;
end; { Line }
procedure SetMode(Mode : byte);
{ Interrupt $10, sub-function 0 - Set video mode }
var
Regs : Registers;
begin
with Regs do
begin
AH := 0;
AL := Mode;
end;
Intr($10, Regs);
end; { SetMode }
var
Row : integer;
Color : byte;
Ch : char;
begin
SetMode($13); { 320x200 256 color mode for VGA and MCGA cards }
Color := 0;
for Row := 0 to 199 do { Draw some lines }
begin
if Odd(Row) then
begin
Line(0, Row, 319, Row, Color);
Inc(Color);
end;
end;
Ch := ReadKey;
TextMode(co80);
end.